#!/bin/bash

#
# Nombre:      mover.sh
# Autor:       Pablo Martin Viva <pmviva@gmail.com>
# Fecha:       19/04/2011
# Descripcion: Provee la funcionalidad de mover archivos <<inteligentemente>>
#              renombrando y numerando archivos en sub directorios destinados 
#              a almacenar archivos duplicados en caso de que los archivos
#              a mover existan
#

#
# Modo de uso:
#
# ./mover.sh <<ARCHIVO ORIGEN>> <<ARCHIVO DESTINO>> [<<COMANDO>>]
#
# Donde <<ARCHIVO ORIGEN>> es el nombre del archivo origen a mover con
# el script mover.sh
#
# Donde <<ARCHIVO DESTINO>> es el nombre del archivo destino a mover con
# el script mover.sh
#
# Donde <<COMANDO>> es el nombre del comando a ser  ejecutado por el
# script mover.sh
#

#
# Verifico que recibo al menos 2 parametros obligatorios:
#
# 1) ARCHIVO ORIGEN
# 2) ARCHIVO DESTINO
#
if [ $# -lt 2 ]
then
	. gralog.sh "MOVER" "Error#1: Cantidad invalida de argumentos" "F"
	return 1
fi

#
# Obtengo parametro archivo origen
#
archivoOrigen=$1

#
# Obtengo parametro archivo destino
#
archivoDestino=$2

#
# Valido la existencia del archivo de origen
#
if [ -f $archivoOrigen ]
then
	#
	# Verifico si directorio destino existe
	#
	if [  -d $archivoDestino ]
	then

		#
		# Obtengo nombre de archivo de origen
		#
		nombreArchivoOrigen=`basename $archivoOrigen`

		#
		# Obtengo archvivo de destino
		#
		archivoDestino="$archivoDestino/$nombreArchivoOrigen"
	fi

	#
	# Valido la existencia del archivo de destino
	#
	if [ -f $archivoDestino ]
	then
		#
		# Verifico si segundo argumento es un directorio
		#
		if [ -d $archivoDestino ]
		then
			#
			# Obtengo nombre de archivo de origen
			#
			nombreArchivoOrigen=`basename $archivoOrigen`

			#
			# Obtengo archvivo de destino
			#
			archivoDestino="$archivoDestino/$nombreArchivoOrigen"
		fi

		#
		# Obtengo el directorio de destino
		#
		directorioDestino=`dirname $archivoDestino`

		#
		# Obtengo el nombre del archivo de destino
		#
		nombreArchivoDestino=`basename $archivoDestino`

		#
		# Obtengo el directorio de destino duplicado
		#
		directorioDestinoDuplicado="$directorioDestino/dup"

		#
		# Verifico existencia de directorio destino duplicado
		#
		if [ ! -d $directorioDestinoDuplicado ]
		then
			mkdir -p "$directorioDestinoDuplicado"
		fi

		#
		# Defino version
		#
		version="1"
		
		#
		# Nomre de archivo duplicado
		#
		archivoDuplicado="$directorioDestinoDuplicado/$nombreArchivoDestino.$version"

		while [ -f $archivoDuplicado ]
		do
			version=`expr $version + 1`
			archivoDuplicado="$directorioDestinoDuplicado/$nombreArchivoDestino.$version"
		done

		#
		# Obtengo archivoDestino
		#
		archivoDestino=$archivoDuplicado

		mv "$archivoOrigen" "$archivoDestino" 2>/dev/null

		#
		# Verifico valor de retorno del comando mv
		#
		if [ $? -eq 0 ]
		then
			. gralog.sh "MOVER" "Mover archivo duplicado. El archivo $archivoOrigen ha sido movido a $archivoDestino" "W"
		else
			. gralog.sh "MOVER" "Error al mover el archivo duplicado desde $archivoOrigen al destino $archivoDestino" "F"
		fi
	else
		mv "$archivoOrigen" "$archivoDestino" 2>/dev/null

		#
		# Verifico valor de retorno del comando mv
		#
		if [ $? -eq 0 ]
		then
			. gralog.sh "MOVER" "El archivo $archivoOrigen ha sido movido a $archivoDestino" "I"
		else
			. gralog.sh "MOVER" "Error al mover el archivo desde $archivoOrigen al destino $archivoDestino" "F"
		fi
	fi
	
else
	. gralog.sh "MOVER" "El archivo $archivoOrigen es inexistente" "F"
	return 3
fi
